/**
 * TDS PEC 4
 * Grupo 3H2M
 *
 * El paquete <code>edu.uoc.tds.pec4.common.util</code> contiene las clases
 * de apoyo para el resto de objetos del sistema.
 */
package edu.uoc.tds.pec4.common.util;

import java.awt.Dimension;
import java.awt.Toolkit;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * La clase <code>UtilidadesGUI</code> implementa una serie de métodos estáticos
 * que sirven de utilidad para el manejo de la interfaz gráfica de usuario.<br />.
 *
 * Métodos estáticos para el manejo de la GUI.<br />
 *
 * @author	Isabel Guerra Monclova
 * @author	Luis Rodríguez-Manzaneque Sánchez
 * @version	03/11/2011 
 * @since	1.00
 */
public class UtilidadesGUI {

    /**
     * Constructor de la clase.
     */
    public UtilidadesGUI() {
    }
    
    /**
     * Devuelve una fecha formateada al patrón dd/MM/yyyy
     * @param   fecha La fecha, de tipo Date, que se quiere formatear.
     * @return  Devuelve una cadena de texto con la fecha formateada a dd/MM/yyyy
     */
    public static String obtenerFecha (Date fecha) {
       
       SimpleDateFormat sdF=new SimpleDateFormat("dd/MM/yyyy");
       return sdF.format(fecha); 
    }
    
    /**
     * Devuelve una hora formateada al patrón hh:mm
     * @param   fecha La fecha, de tipo Date, que se quiere formatear.
     * @return  Devuelve una cadena de texto con la fecha formateada a hh:mm
     */
    public static String obtenerHora (Date hora) {

       SimpleDateFormat sdF=new SimpleDateFormat("hh:mm");
       return sdF.format(hora);
    }
    
    /**
     * Devuelve si el campo introducido es numerico
     * @param   cadena 
     * @return  Devuelve una boolean
     */
    public static boolean esNumerico(String cadena){
        try{
            Integer.parseInt(cadena);
            return true;
        }catch (NumberFormatException nfe){
            return false;
        }
        
    }
    
    /**
     * Devuelve una línea llena de espacios en blanco
     */
    public static String lineaEnBlanco() {
        StringBuilder sb = new StringBuilder();
        for (int i=0;i<182;i++)
            sb.append(" ");
        sb.append(Constantes.SL);
        return sb.toString();
    }

    /**
     * Devuelve dos saltos de línea
     */
    public static String saltoComentario() {
        return Constantes.SL + Constantes.SL;
    }
    
    /**
     * Situa un JFrame en la posición central de la pantalla
     */
    public static void centrarVentana(java.awt.Container jfPrincipal) {
        //este metodo devuelve el tamaño de la pantalla  
        Dimension pantalla = Toolkit.getDefaultToolkit().getScreenSize();  
        //obtenemos el tamaño de la ventana  
        Dimension ventana = jfPrincipal.getSize();  
        //para centrar la ventana lo hacemos con el siguiente calculo  
        jfPrincipal.setLocation((pantalla.width - ventana.width) / 2, (pantalla.height - ventana.height) / 2);  
    }
    
    /**
     * Situa una ventana en la posición central de la ventana padre
     */
    public static void centrarVentana(java.awt.Container hijo, java.awt.Container jfPrincipal) {
        //este metodo devuelve el tamaño de la pantalla  
        Dimension pantalla = jfPrincipal.getSize();
        //obtenemos el tamaño de la ventana  
        Dimension ventana = hijo.getSize();  
        //para centrar la ventana lo hacemos con el siguiente calculo  
        hijo.setLocation((pantalla.width - ventana.width) / 2, (pantalla.height - ventana.height) / 2);  
    }
    
    /**
     * Devuelve un numero decimal formateado con dos decimales y símbolo de %
     * @param   numero El número, de tipo Float, que se quiere formatear.
     * @return  Devuelve una cadena de texto con el decimal formateado y símbolo %
     */
    public static String obtenerPorcentaje (Float numero) {
       
       DecimalFormat df = new DecimalFormat("0.00");
       String porcentaje = df.format(numero)+" %";
       return porcentaje;
    }

    /**
     * Devuelve un numero decimal formateado con dos decimales
     * @param   numero El número, de tipo Float, que se quiere formatear.
     * @return  Devuelve una cadena de texto con el decimal formateado
     */
    public static String obtenerDecimal (Float numero) {
       
       DecimalFormat df = new DecimalFormat("0.00");
       return df.format(numero);
    }
    
    /**
     * Devuelve un numero decimal formateado con dos decimales
     * @param   numero El número, de tipo Double que se quiere formatear.
     * @return  Devuelve una cadena de texto con el decimal formateado
     */
    public static String obtenerDecimal(Double num){
        DecimalFormat df = new DecimalFormat("0.00");
        return df.format(num);
    }
    
    /**
     * Devuelve un numero decimal formateado con dos decimales y símbolo de €
     * @param   numero El número, de tipo Float, que se quiere formatear.
     * @return  Devuelve una cadena de texto con el decimal formateado con €
     */
    public static String obtenerImporte (Float numero) {
       
       DecimalFormat df = new DecimalFormat("0.00");
       String importe = df.format(numero)+" €";
       return importe;
    }
    
    /**
     * Devuelve un literal de fecha en objeto Date formateado con el patrón dd/MM/yyyy
     * @param   fecha La fecha, de tipo String, de la cual se obtiene el objeto Date.
     * @return  Devuelve un objeto Date que representa la cadena
     */
    public static Date obtenerFecha (String fecha) throws ParseException {

       SimpleDateFormat sdF=new SimpleDateFormat("dd/MM/yyyy");
       sdF.setLenient(false);
       return sdF.parse(fecha);
    }    
    
     /**
     * Devuelve un literal de fecha en objeto Date formateado con el patrón hh:mm
     * @param   hora La hora, de tipo String, de la cual se obtiene el objeto Date.
     * @return  Devuelve un objeto Date que representa la cadena
     */
    public static Date obtenerHora (String hora) throws ParseException {

       SimpleDateFormat horas = new SimpleDateFormat("HH:mm");
       horas.setLenient(false);
       return horas.parse(hora);
    } 
    
}
